#!/usr/bin/env python
# -*- coding:utf-8 -*-

# file:userTokenService.py
# author:PigKnight
# datetime:2022/2/22 21:52
# software: PyCharm
"""
this is function description
"""

from flask import current_app
from itsdangerous import TimedJSONWebSignatureSerializer as Serializer

from ..utils.loggings import loggings
from ..utils.response_code import RET


class UserTokenService:

    # token生成
    @classmethod
    def create_token(cls, _userid, _usertype):
        """
        生成新的token
        :param user_type: 用户类型，1--学生；2--教师；3--平台管理员；
        :param _userID:用户id
        :param _userType:用户类型（角色）
        :return: token
        """
        # 第一个参数是内部的私钥(配置信息)，第二个参数是有效期(秒)
        s = Serializer(current_app.config["SECRET_KEY"], expires_in=current_app.config["TOKEN_EXPIRES"])

        # 接受用户id转换编码
        token = s.dumps({"user_id": _userid, "user_type": _usertype}).decode("ascii")
        return token

# 根据token获取用户信息
    @classmethod
    def get_user_by_token(cls, token):
        """
        校验token
        :param token:token值
        :return: 用户信息 or None
        """
        # 参数为私有密钥，与生成token的密钥一致
        s = Serializer(current_app.config["SECRET_KEY"])
        try:
            # 转换为字典
            data = s.loads(token)
            return data
        except Exception as e:
            loggings.exception(1, e)
            return {'code': RET.DBERR, 'message': '用户未登录或登录已过期', 'error': '用户未登录或登录已过期'}
